﻿using Ninject;
using Ninject.Modules;

namespace GigaSite.Domain.IoC
{
    /// <remarks>
    /// В качестве IoC контейнера используется Ninject
    /// </remarks>
    /// <summary>
    /// IoC локатор сервисов, предназначенный для резолвинга зависимостей с помощью IoC контейнера
    /// </summary>
    public static class Locator
    {
        /// <summary>
        /// IoC контейнер
        /// </summary>
        public static IKernel Container { get; private set; }

        /// <summary>
        /// Инициализирует IoC контейнер указанными модулями
        /// </summary>
        /// <param name="modules"></param>
        public static void Init(params INinjectModule[] modules)
        {
            Container = new StandardKernel(modules);
        }

        /// <summary>
        /// Получает реализацию или инстант типа с помощью IoC контейнера
        /// </summary>
        /// <typeparam name="T">Необходимый тип</typeparam>
        /// <returns>Реализация или инстанс указанного типа</returns>
        public static T GetService<T>()
        {
            return Container.Get<T>();
        }
    }
}